package com.cwt_taxi_xa.db.bll;

import android.content.Context;
import android.os.AsyncTask;
import android.os.Handler;

import com.cwt_taxi_xa.db.dal.ContactDao;
import com.cwt_taxi_xa.model.ContactInfo;
import com.cwt_taxi_xa.util.PinYin;
import com.cwt_taxi_xa.util.StringTypeUtil;
import com.cwt_taxi_xa.util.ToastUtils;
import com.cwt_taxi_xa.util.UnicodeGBK2Alpha;

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ContactBiz {

	private ContactDao dao;
	private Context context;

	public ContactBiz(Context context) {
		this.context = context;
		dao = new ContactDao(context);
	}

	public void getContacts(final Handler handler){
		ToastUtils.getInstance().popProgress(context, "玩命加载中...");
		new AsyncTask<Void, Void, ArrayList<ContactInfo>>(){

			@Override
			protected ArrayList<ContactInfo> doInBackground(Void... arg0) {
				// TODO Auto-generated method stub
				ArrayList<ContactInfo> infos = dao.getContacts();
				return infos;
			}

			protected void onPostExecute(ArrayList<ContactInfo> result) {
				if(handler != null){
					handler.obtainMessage(1005, result).sendToTarget();
				}
				ToastUtils.getInstance().dismissCurrentDlg();
			};
		}.execute();
	}

	/**
	 * 按号码-拼音搜索联系人
	 *
	 * @param filteText
	 */
	public ArrayList<ContactInfo> search(final String filteText,
										 final ArrayList<ContactInfo> allContacts) {
		ArrayList<ContactInfo> filteList = new ArrayList<ContactInfo>();

		if(StringTypeUtil.containChinese(filteText)){
			// 含中文
			for (ContactInfo contact : allContacts){
				if(contact.getName().contains(filteText)){
					filteList.add(contact);
				}
			}
		}else if(StringTypeUtil.isDigit(filteText)){
			// 全数字
			for (ContactInfo contact : allContacts){
				if(contact.getPhone().contains(filteText)
						|| contact.getName().contains(filteText)){
					filteList.add(contact);
				}
			}
		}else if(StringTypeUtil.isLetter(filteText)){
			// 全字母
			// 先将输入的字符串转换为拼音
			final String result = PinYin.getPinYin(filteText);
			for (ContactInfo contact : allContacts) {
				if (contains(contact, result) || contact.getName().contains(filteText)) {
					filteList.add(contact);
				}
			}
		}
		return filteList;
	}

	/**
	 * 根据拼音搜索
	 *
	 * @param str
	 *            正则表达式
	 * @param pyName
	 *            拼音
	 * @param isIncludsive
	 *            搜索条件是否大于6个字符
	 * @return
	 */
	public static boolean contains(ContactInfo contact, String search) {
		boolean flag = false;

		// 简拼匹配,如果输入在字符串长度大于6就不按首字母匹配了
		if (search.length() < 6) {
			// String firstLetters = FirstLetterUtil.getFirstLetter(contact
			// .getName());
			// 获得首字母字符串
			String firstLetters = UnicodeGBK2Alpha
					.getSimpleCharsOfStringByTrim(contact.getName());
			// String firstLetters =
			// PinYinUtil.getFirstSpell(contact.getName());
			// 不区分大小写
			Pattern firstLetterMatcher = Pattern.compile("^" + search,
					Pattern.CASE_INSENSITIVE);
			flag = firstLetterMatcher.matcher(firstLetters).find();
		}

		if (!flag) { // 如果简拼已经找到了，就不使用全拼了
			// 全拼匹配
			// ChineseSpelling finder = ChineseSpelling.getInstance();
			// finder.setResource(contact.getName());
			// 不区分大小写
			Pattern pattern2 = Pattern
					.compile(search, Pattern.CASE_INSENSITIVE);
			Matcher matcher2 = pattern2.matcher(PinYin.getPinYin(contact
					.getName()));
			flag = matcher2.find();
		}

		return flag;
	}

	/**批量添加*/
	public int addContacts(ArrayList<ContactInfo> contacts){
		return dao.update(contacts);
	}

	/**批量修改*/
	public int updateContacts(ArrayList<ContactInfo> contacts){
		return dao.update(contacts);
	}

	/**先清空后批量添加*/
	public int refreshContacts(ArrayList<ContactInfo> contacts){
		return dao.refresh(contacts);
	}

	/**清空*/
	public int clearContacts(){
		return dao.clear();
	}

	/**判断该号码能否呼入*/
	public boolean isIncomingContact(String phone){
		return dao.isIncomingContact(phone);
	}

	/**仅限呼出*/
	public boolean isUnIncomingContact(String phone){
		return dao.isUnIncomingContact(phone);
	}
}
